c++11

您所在的位置:网站首页 template typedef c++11

c++11

#c++11| 来源: 网络整理| 查看: 265

一、 c++ traits

    traits是c++模板编程中使用的一种技术,主要功能:     把功能相同而参数不同的函数抽象出来,通过traits将不同的参数的相同属性提取出来,在函数中利用这些用traits提取的属性,使得函数对不同的参数表现一致。

    traits是一种特性萃取技术,它在Generic Programming中被广泛运用,常常被用于使不同的类型可以用于相同的操作,或者针对不同类型提供不同的实现.traits在实现过程中往往需要用到以下三种C++的基本特性: enum、typedef、template (partial) specialization 其中:     enum用于将在不同类型间变化的标示统一成一个,它在C++中常常被用于在类中替代define,你可以称enum为类中的define;     typedef则用于定义你的模板类支持特性的形式,你的模板类必须以某种形式支持某一特性,否则类型萃取器traits将无法正常工作     template (partial) specialization被用于提供针对特定类型的正确的或更合适的版本.

参考 c++ traits

二、 c++11 中 type_traits

    通过type_traits可以实现在编译期计算、查询、判断、转换和选择,增强了泛型编程的能力,也增强了程序的弹性,使得我们在编译期就能做到优化改进甚至排错,能进一步提高代码质量。

1. 基本的type_traits 1.1 简单的type_traits(以定义结构体/类中的常量为例) 定义一个编译期常量 template struct GetLeftSize{ //使用静态常量 static const int value = 1; //或者使用 enum enum{value = 1}; }; 在c++11中直接继承 std::integral_constant即可。 template struct GetLeftSize : std::integral_constant < int, 1 > { }; int main(){ cout struct is_same; 判断两个类型是否相同 template< typename T, typename U>struct is_base_of; 判断类型T是否是类型U的基类 template< typename T, typename U>struct is_convertible; 判断类型T能否转换为类型U

    和type_traits的其他使用一样,通过 is_xxx::value 获得结果(true/false).

1.4 类型的转换 traits traits类型说明 template< typename T>struct remove_const; 移除const template< typename T>struct add_const; 添加const template< typename T>struct remove_reference; 移除引用 template< typename T>struct add_lvalue_reference; 添加左值引用 template< typename T>struct add_rvalue_reference; 添加右值引用 template< typename T>struct remove_extent; 移除数组顶层的维度,比如 int [3][3][2] 变为 int [3][2] template< typename T>struct remove_all_extent; 移除数组所有的维度,比如 int [3][3][2] 变为 int template< typename T>struct remove_pointer; 移除指针 template< typename T>struct add_pointer; 添加指针 template< typename T>struct decay; 移除cv或者添加指针 template< typename .... T>struct common_type; 获取公共类型

    通过 ::type来访问这些类型。

std::cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3